/**
 * JWT令牌工具函数
 */

/**
 * 保存令牌到localStorage
 * @param {string} token JWT令牌
 */
export function setToken(token) {
  localStorage.setItem('token', token);
}

/**
 * 从localStorage获取令牌
 * @returns {string|null} JWT令牌
 */
export function getToken() {
  return localStorage.getItem('token');
}

/**
 * 从localStorage移除令牌
 */
export function removeToken() {
  localStorage.removeItem('token');
}

/**
 * 解析JWT令牌 payload
 * @param {string} token JWT令牌
 * @returns {Object|null} 解析后的payload对象
 */
export function parseToken(token) {
  try {
    if (!token) return null;

    const base64Url = token.split('.')[1];
    const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
    const jsonPayload = decodeURIComponent(
      atob(base64)
        .split('')
        .map(c => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))
        .join('')
    );

    return JSON.parse(jsonPayload);
  } catch (error) {
    console.error('解析令牌失败:', error);
    return null;
  }
}

/**
 * 检查令牌是否过期
 * @param {string} token JWT令牌
 * @returns {boolean} 是否过期
 */
export function isTokenExpired(token) {
  const payload = parseToken(token);
  if (!payload || !payload.exp) return true;

  // 获取当前时间戳（秒）
  const currentTime = Math.floor(Date.now() / 1000);

  // 检查是否过期
  return payload.exp < currentTime;
}

/**
 * 获取令牌剩余有效时间（秒）
 * @param {string} token JWT令牌
 * @returns {number} 剩余有效时间（秒），已过期返回负数
 */
export function getTokenExpiresIn(token) {
  const payload = parseToken(token);
  if (!payload || !payload.exp) return 0;

  // 获取当前时间戳（秒）
  const currentTime = Math.floor(Date.now() / 1000);

  // 计算剩余时间
  return payload.exp - currentTime;
}

export default {
  setToken,
  getToken,
  removeToken,
  parseToken,
  isTokenExpired,
  getTokenExpiresIn
};
